(module unordered-bag mzscheme

  (require "../private/require.ss")
  (require-contracts)
  (require-class)
  (require-lists)

  (require ;;"../private/contracts.ss"
           "../table/unordered-table.ss"
           "bag-interface.ss"
           "bag-from-table.ss")

  (provide/contract
   [unordered-bag% (implementation?/c bag<%>)]
   [make-unordered-bag (([equ? equality/c]
                         [elems (listof any/c)])
                        . ->r . bag/c)])

  (define (make-unordered-bag equ? elems)
    (foldl (lambda (elem bag)
             (send bag insert elem))
           (make-bag-from-table (make-unordered-table equ? null null))
           elems))

  (define unordered-bag% bag-from-table%)
  
  )
